package com.qi.demo01.Lock8;

import java.util.concurrent.TimeUnit;

/**
 * @author zjq
 * @date 2020/3/25 20:12
 */

/**
 * 5.增加两个静态的同步方法
 * 6.两个对象！，增加两个静态的同步方法
 */
public class Test2 {
    public static void main(String[] args) throws InterruptedException {
        Phone2 phone2 = new Phone2();
        Phone2 phone21 = new Phone2();//两个对象的Class模板只有一个，Static，锁的是class


        new Thread(() -> {
            try {
                phone2.sendSms();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, "A").start();
        TimeUnit.SECONDS.sleep(1);
        new Thread(() -> {
            phone21.call();
        }, "B").start();
    }
}

class Phone2 {
    //Synchronized 锁的对象是方法的调用者
    //static 静态方法
    //类一加载就有了 Class，模板
    //锁的是Class，class全局唯一，所以两个方法用的同一个锁
    public static synchronized void sendSms() throws InterruptedException {
        TimeUnit.SECONDS.sleep(4);
        System.out.println("send");
    }

    public static synchronized void call() {
        System.out.println("call");
    }

    //这里没有锁，不是同步方法，不收锁的影响
    public void Hello() {
        System.out.println("hello");
    }
}